//
// Created by iguilty on 2022-01-14.
//

#include "Handle.h"
#include <iostream>
using namespace std;

Handle::Handle() {
    _succ = 0;
}

Handle::~Handle() {
    delete _succ;
}

Handle::Handle(Handle* succ) {
    this->_succ=succ;
}

void Handle::SetSuccessor(Handle *succ) {
    _succ = succ;
}

Handle * Handle::GetSuccessor() {
    return _succ;
}

void Handle::HandleRequest() {}

ConcreteHandleA::ConcreteHandleA() {

}

ConcreteHandleA::ConcreteHandleA(Handle *succ) :Handle(succ){

}

ConcreteHandleA::~ConcreteHandleA() {

}

void ConcreteHandleA::HandleRequest() {
    if (this->GetSuccessor()!=0){
        cout<<"ConcreteHandleA 我把处理权给后继节点......"<<endl;
        this->GetSuccessor()->HandleRequest();
    } else{
        cout<<"ConcreteHandleA 没有后继了,我必须自己处理..."<<endl;
    }
}

ConcreteHandleB::ConcreteHandleB() {}

ConcreteHandleB::ConcreteHandleB(Handle *succ): Handle(succ){}

ConcreteHandleB::~ConcreteHandleB() {}

void ConcreteHandleB::HandleRequest() {
    if (this->GetSuccessor()!=0){
        cout<<"ConcreteHandleB 我把处理权给后继节点......"<<endl;
        this->GetSuccessor()->HandleRequest();
    } else{
        cout<<"ConcreteHandleB 没有后继了,我必须自己处理..."<<endl;
    }
}




